package com.single;

public class LazyMan2 {
    //定义实例  volatile 保证可见性 禁止指令重排
    private static volatile LazyMan2 instance;
    //私有构造方法
    private LazyMan2(){}
    //对外提供获取实例的静态方法,对该方法加锁
    public static synchronized LazyMan2 getInstance() {  //加了锁的懒汉式单例 线程安全。 效率很低
        /**
         * 因为上面的synchronized的加锁范围是整个方法，该方法的所有操作都是同步进行的，
         * 但是对于非第一次创建对象的情况，也就是没有进入if语句中的情况，根本不需要同步操作，
         * 可以直接返回instance
         * */
        //在对象被使用的时候才实例化
        if (instance == null) {
            instance = new LazyMan2();
        }
        return instance;
    }
}
